home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_MEDVL.ZIP / Get Medieval.txt < prev    next >
Text File  |  1998-09-16  |  23KB  |  455 lines

  1.  
  2. Free Information Xchange '98 presents:
  3.  
  4. Get Medieval - CD crack by Static Vengeance - Sep 12, 1998
  5.  
  6. Requirementes:
  7. Hex editor and full game install
  8. W32Dasm if you wish to follow along
  9.  
  10.     Get Medieval is a new 1998 version of Gauntlet produced by Monolith.  The game is great if you
  11. like Gaunlet and is done well.  I, of course, want to be able to play the game without the CD so I looked
  12. into cracking this game.  The CD check is much like that found in Captain Claw (or just "Claw") which is
  13. also produced by Monolith.  Also, once again this provides me with the oppertunity to write up another
  14. tutorial for you to read and learn from.  So follow along with me as we go on our own adventure with Get
  15. Medieval's copy protection, and find out how to slay this evil beast.
  16.     To get started you'll need some tools.  The two tools I used the most are W32Dasm from RUSOft and
  17. a Hex editor.  The Hex editor I use is HEdit, only becuase this is the first one I used.  However any hex
  18. editor will work fine.  Next you'll need to disassemble the exe file and then we can get started.  After
  19. you have W32Dasm up and running and have disassembled Medieval.exe, go up the menu bar and select "Refs"
  20. and then down to String Data References from the drop down menu.  Now you get the Refs pop up box.  From
  21. here grab the slider bar and start looking for interesting things.  Right away you'll see a a ref like
  22. "%c:\GAME\MEDIEVAL.EXE"  I've seen this in many copy protection routines, so I double clicked on this one
  23. first.  This put me in the middle of the following routine:
  24.  
  25. * Referenced by a CALL at Addresses:
  26. |:00410790   , :0042C075                    <-- Called by two locations
  27. |
  28. :004107F0 64A100000000            mov eax, dword ptr fs:[00000000]
  29. :004107F6 6AFF                    push FFFFFFFF
  30. :004107F8 683B484D00              push 004D483B
  31. :004107FD 50                      push eax
  32. :004107FE A0C86A5000              mov al, byte ptr [00506AC8]
  33. :00410803 64892500000000          mov dword ptr fs:[00000000], esp
  34. :0041080A 81EC60040000            sub esp, 00000460
  35. :00410810 53                      push ebx
  36. :00410811 33DB                    xor ebx, ebx
  37. :00410813 56                      push esi
  38. :00410814 3AC3                    cmp al, bl
  39. :00410816 57                      push edi
  40. :00410817 0F852C010000            jne 00410949
  41. :0041081D 899C2450010000          mov dword ptr [esp+00000150], ebx
  42. :00410824 53                      push ebx
  43. :00410825 6802000080              push 80000002
  44. :0041082A 53                      push ebx
  45.  
  46. * Possible StringData Ref from Data Obj ->"1.0"
  47.                                   |
  48. :0041082B 6860574F00              push 004F5760
  49.  
  50. * Possible StringData Ref from Data Obj ->"Get Medieval"
  51.                                   |
  52. :00410830 6850574F00              push 004F5750
  53.  
  54. * Possible StringData Ref from Data Obj ->"Monolith Productions"
  55.                                   |
  56. :00410835 6838574F00              push 004F5738
  57. :0041083A 8D8C2468010000          lea ecx, dword ptr [esp+00000168]
  58. :00410841 899C248C040000          mov dword ptr [esp+0000048C], ebx
  59. :00410848 E853100700              call 004818A0
  60.  
  61. * Reference To: KERNEL32.GetDriveTypeA, Ord:00DFh               <-- Commonly used in CD checks
  62.                                   |
  63. :0041084D 8B3DD0D04D00            mov edi, dword ptr [004DD0D0]
  64. :00410853 85C0                    test eax, eax
  65. :00410855 0F8480000000            je 004108DB                   <-- 00 means "Drive Cannot Be determined"
  66. :0041085B 8D44240C                lea eax, dword ptr [esp+0C]
  67. :0041085F 53                      push ebx
  68. :00410860 8D4C2414                lea ecx, dword ptr [esp+14]
  69. :00410864 50                      push eax
  70. :00410865 51                      push ecx
  71.  
  72. * Possible StringData Ref from Data Obj ->"CdRom Drive"
  73.                                   |
  74. :00410866 68C8664F00              push 004F66C8
  75. :0041086B 8D8C2460010000          lea ecx, dword ptr [esp+00000160]
  76. :00410872 C744241C1E000000        mov [esp+1C], 0000001E
  77. :0041087A 885C2420                mov byte ptr [esp+20], bl
  78. :0041087E E85D120700              call 00481AE0                 <-- Check against CD Rom drive
  79. :00410883 85C0                    test eax, eax
  80. :00410885 7454                    je 004108DB
  81. :00410887 8A442410                mov al, byte ptr [esp+10]
  82. :0041088B 3C14                    cmp al, 14
  83. :0041088D 7E4C                    jle 004108DB
  84. :0041088F 0FBEF0                  movsx esi, al
  85. :00410892 56                      push esi
  86. :00410893 8D542434                lea edx, dword ptr [esp+34]
  87.  
  88. * Possible StringData Ref from Data Obj ->"%c:\"                <-- Start with C:\ and work through all drives
  89.                                   |                             <-- Again, "%c:\" is commonly used in CD checks
  90. :00410897 68C0664F00              push 004F66C0
  91. :0041089C 52                      push edx
  92. :0041089D 8AD8                    mov bl, al
  93. :0041089F E83CB90500              call 0046C1E0
  94. :004108A4 83C40C                  add esp, 0000000C
  95. :004108A7 8D442430                lea eax, dword ptr [esp+30]
  96. :004108AB 50                      push eax
  97. :004108AC FFD7                    call edi
  98. :004108AE 83F805                  cmp eax, 00000005
  99. :004108B1 7528                    jne 004108DB
  100. :004108B3 56                      push esi
  101. :004108B4 8D4C2454                lea ecx, dword ptr [esp+54]
  102.  
  103. * Possible StringData Ref from Data Obj ->"%c:\GAME\MEDIEVAL.EXE"  <-- Path name on CD for the EXE
  104.                                   |                                <--  The "c" will get updated to CD rom letter
  105. :004108B8 68D4664F00              push 004F66D4
  106. :004108BD 51                      push ecx
  107. :004108BE E81DB90500              call 0046C1E0
  108. :004108C3 83C40C                  add esp, 0000000C
  109. :004108C6 8D542450                lea edx, dword ptr [esp+50]
  110. :004108CA 52                      push edx
  111. :004108CB E8D0FEFFFF              call 004107A0
  112. :004108D0 83C404                  add esp, 00000004
  113. :004108D3 85C0                    test eax, eax
  114. :004108D5 0F8586000000            jne 00410961                  <-- Jump down to exit section of routine
  115.  
  116. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  117. |:00410855(C), :00410885(C), :0041088D(C), :004108B1(C)
  118. |
  119. :004108DB B341                    mov bl, 41
  120.  
  121. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  122. |:0041092E(C)
  123. |
  124. :004108DD 0FBEF3                  movsx esi, bl
  125. :004108E0 56                      push esi
  126. :004108E1 8D842470030000          lea eax, dword ptr [esp+00000370]
  127.  
  128. * Possible StringData Ref from Data Obj ->"%c:\"                 <-- Starting over with checks
  129.                                   |
  130. :004108E8 68C0664F00              push 004F66C0
  131. :004108ED 50                      push eax
  132. :004108EE E8EDB80500              call 0046C1E0
  133. :004108F3 83C40C                  add esp, 0000000C
  134. :004108F6 8D8C246C030000          lea ecx, dword ptr [esp+0000036C]
  135. :004108FD 51                      push ecx
  136. :004108FE FFD7                    call edi
  137. :00410900 83F805                  cmp eax, 00000005
  138. :00410903 7524                    jne 00410929
  139. :00410905 56                      push esi
  140. :00410906 8D542454                lea edx, dword ptr [esp+54]
  141.  
  142. * Possible StringData Ref from Data Obj ->"%c:\GAME\MEDIEVAL.EXE"  <-- File we're looking for
  143.                                   |
  144. :0041090A 68D4664F00              push 004F66D4
  145. :0041090F 52                      push edx
  146. :00410910 E8CBB80500              call 0046C1E0
  147. :00410915 83C40C                  add esp, 0000000C
  148. :00410918 8D442450                lea eax, dword ptr [esp+50]
  149. :0041091C 50                      push eax
  150. :0041091D E87EFEFFFF              call 004107A0
  151. :00410922 83C404                  add esp, 00000004
  152. :00410925 85C0                    test eax, eax
  153. :00410927 7538                    jne 00410961                   <-- Take this jump for successful CD check
  154.  
  155. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  156. |:00410903(C)
  157. |
  158. :00410929 FEC3                    inc bl                         <-- Increase the total number of tries
  159. :0041092B 80FB5A                  cmp bl, 5A                     <-- Max number of atempts for CD check
  160. :0041092E 7EAD                    jle 004108DD                   <-- If less the max #, keep trying
  161. :00410930 8D8C2450010000          lea ecx, dword ptr [esp+00000150]
  162. :00410937 C7842474040000FFFFFFFF  mov dword ptr [esp+00000474], FFFFFFFF
  163. :00410942 E879100700              call 004819C0
  164. :00410947 32C0                    xor al, al                     <-- Zero out al for failed CD check
  165.  
  166. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  167. |:00410817(C), :00410980(U)
  168. |
  169. :00410949 8B8C246C040000          mov ecx, dword ptr [esp+0000046C]
  170. :00410950 5F                      pop edi
  171. :00410951 5E                      pop esi
  172. :00410952 64890D00000000          mov dword ptr fs:[00000000], ecx
  173. :00410959 5B                      pop ebx
  174. :0041095A 81C46C040000            add esp, 0000046C
  175. :00410960 C3                      ret
  176.  
  177. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:  <-- Need to get here for passed CD check
  178. |:004108D5(C), :00410927(C)
  179. |
  180. :00410961 8D8C2450010000          lea ecx, dword ptr [esp+00000150]
  181. :00410968 881DC86A5000            mov byte ptr [00506AC8], bl
  182. :0041096E C7842474040000FFFFFFFF  mov dword ptr [esp+00000474], FFFFFFFF
  183. :00410979 E842100700              call 004819C0
  184. :0041097E 8AC3                    mov al, bl              <-- Move a non-zero value to al, bl=number of tries
  185. :00410980 EBC7                    jmp 00410949            <-- Jump back up to the exit section
  186. :00410982 90                      nop
  187. :00410983 90                      nop
  188. :00410984 90                      nop
  189.  
  190.     That's the basics of what the CD check is doing.  Now we'll look at the two callers to find
  191. the place we will want to place our patch.  So let's first check out the code around 410790:
  192.  
  193. * Referenced by a CALL at Addresses:
  194. |:0041064F   , :00410719   , :0041072D              <-- Called three times
  195. |
  196. :00410790 E85B000000              call 004107F0     <-- Read the exe off the CD
  197. :00410795 33C9                    xor ecx, ecx      <-- Zero out the ecx
  198. :00410797 84C0                    test al, al       <-- Test for the result of the CD check
  199. :00410799 0F95C1                  setne cl          <-- Non-zero in al will result in cl = 01
  200. :0041079C 8BC1                    mov eax, ecx      <-- Move the the "new" value into eax
  201. :0041079E C3                      ret               <-- Return to the caller
  202.  
  203.     Alright, that's pretty short.  So lets go back one step and check out the three calls from
  204. above.  We'll check out the code surounding the three calls to see what needs to be done to kill
  205. this call to the CD check.  What we're looking for is a good spot to put a simple patch, idealy it's
  206. place where we could make a single edit.  So let's keep going with this one.
  207.  
  208. * Referenced by a CALL at Address:
  209. |:0046A729                                        <-- Called from one spot!
  210. |
  211. :00410630 64A100000000            mov eax, dword ptr fs:[00000000]
  212. :00410636 6AFF                    push FFFFFFFF
  213. :00410638 681B484D00              push 004D481B
  214. :0041063D 50                      push eax
  215. :0041063E 64892500000000          mov dword ptr fs:[00000000], esp
  216. :00410645 81ECC0000000            sub esp, 000000C0
  217. :0041064B 53                      push ebx
  218. :0041064C 55                      push ebp
  219. :0041064D 56                      push esi
  220. :0041064E 57                      push edi
  221. :0041064F E83C010000              call 00410790                 <-- The first call to the above routine
  222. :00410654 85C0                    test eax, eax
  223. :00410656 740A                    je 00410662                   <-- Zero in eax means the CD check failed
  224. :00410658 B801000000              mov eax, 00000001             <-- Setup for a sucessful CD check
  225. :0041065D E912010000              jmp 00410774                  <-- Jump down to the exit section
  226.  
  227. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  228. |:00410656(C)
  229. |
  230. :00410662 8BAC24E0000000          mov ebp, dword ptr [esp+000000E0]
  231.  
  232. * Reference To: USER32.LoadStringA, Ord:0183h
  233.                                   |
  234. :00410669 8B1D78D44D00            mov ebx, dword ptr [004DD478]
  235.  
  236. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  237. |:0041074E(U)
  238. |
  239. :0041066F 8B0DD8005200            mov ecx, dword ptr [005200D8]
  240. :00410675 8D442450                lea eax, dword ptr [esp+50]
  241. :00410679 6A7C                    push 0000007C
  242. :0041067B 50                      push eax
  243.  
  244. * Possible Ref to Menu: MEDIEVAL, Item: "Single   1"
  245.                                   |
  246. * Possible Reference to String Resource ID=32804: "Please insert the Get Medieval CD-ROM into the drive."
  247.                                   |
  248. :0041067C 6824800000              push 00008024
  249. :00410681 51                      push ecx
  250. :00410682 FFD3                    call ebx
  251. :00410684 85C0                    test eax, eax
  252. :00410686 7524                    jne 004106AC
  253.  
  254. * Possible StringData Ref from Data Obj ->"Please insert the game CD-ROM "   <-- This says it all, and is
  255.                                         ->"into the drive."                  <--  what we never want to see
  256.                                   |
  257. :00410688 BF90664F00              mov edi, 004F6690
  258. :0041068D 83C9FF                  or ecx, FFFFFFFF
  259. :00410690 F2                      repnz
  260. :00410691 AE                      scasb
  261. :00410692 F7D1                    not ecx
  262. :00410694 2BF9                    sub edi, ecx
  263. :00410696 8D542450                lea edx, dword ptr [esp+50]
  264. :0041069A 8BC1                    mov eax, ecx
  265. :0041069C 8BF7                    mov esi, edi
  266. :0041069E 8BFA                    mov edi, edx
  267. :004106A0 C1E902                  shr ecx, 02
  268. :004106A3 F3                      repz
  269. :004106A4 A5                      movsd
  270. :004106A5 8BC8                    mov ecx, eax
  271. :004106A7 83E103                  and ecx, 00000003
  272. :004106AA F3                      repz
  273. :004106AB A4                      movsb
  274.  
  275. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  276. |:00410686(C)
  277. |
  278. :004106AC 8B15D8005200            mov edx, dword ptr [005200D8]
  279. :004106B2 8D4C2410                lea ecx, dword ptr [esp+10]
  280. :004106B6 6A3E                    push 0000003E
  281. :004106B8 51                      push ecx
  282.  
  283. * Possible Reference to String Resource ID=32771: "Get Medieval"
  284.                                   |
  285. :004106B9 6803800000              push 00008003
  286. :004106BE 52                      push edx
  287. :004106BF FFD3                    call ebx
  288. :004106C1 85C0                    test eax, eax
  289. :004106C3 7524                    jne 004106E9
  290.  
  291. * Possible StringData Ref from Data Obj ->"Get Medieval"
  292.                                   |
  293. :004106C5 BF50574F00              mov edi, 004F5750
  294. :004106CA 83C9FF                  or ecx, FFFFFFFF
  295. :004106CD F2                      repnz
  296. :004106CE AE                      scasb
  297. :004106CF F7D1                    not ecx
  298. :004106D1 2BF9                    sub edi, ecx
  299. :004106D3 8D542410                lea edx, dword ptr [esp+10]
  300. :004106D7 8BC1                    mov eax, ecx
  301. :004106D9 8BF7                    mov esi, edi
  302. :004106DB 8BFA                    mov edi, edx
  303. :004106DD C1E902                  shr ecx, 02
  304. :004106E0 F3                      repz
  305. :004106E1 A5                      movsd
  306. :004106E2 8BC8                    mov ecx, eax
  307. :004106E4 83E103                  and ecx, 00000003
  308. :004106E7 F3                      repz
  309. :004106E8 A4                      movsb
  310.  
  311. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  312. |:004106C3(C)
  313. |
  314. :004106E9 8D4C2410                lea ecx, dword ptr [esp+10]
  315. :004106ED 6A31                    push 00000031
  316. :004106EF 8D542454                lea edx, dword ptr [esp+54]
  317. :004106F3 51                      push ecx
  318. :004106F4 52                      push edx
  319. :004106F5 55                      push ebp
  320.  
  321. * Reference To: USER32.MessageBoxA, Ord:0195h
  322.                                   |
  323. :004106F6 FF1574D44D00            Call dword ptr [004DD474]
  324. :004106FC 83F801                  cmp eax, 00000001
  325. :004106FF 7571                    jne 00410772
  326. :00410701 E8331E0C00              call 004D2539
  327. :00410706 8B4804                  mov ecx, dword ptr [eax+04]
  328. :00410709 E82E890B00              call 004C903C
  329. :0041070E C78424D800000000000000  mov dword ptr [esp+000000D8], 00000000
  330. :00410719 E872000000              call 00410790                          <-- Second call to 410790
  331. :0041071E 85C0                    test eax, eax
  332. :00410720 7531                    jne 00410753
  333. :00410722 68E8030000              push 000003E8
  334.  
  335. * Reference To: KERNEL32.Sleep, Ord:023Fh
  336.                                   |
  337. :00410727 FF1560D24D00            Call dword ptr [004DD260]
  338. :0041072D E85E000000              call 00410790                         <-- The last call to 410790
  339. :00410732 85C0                    test eax, eax
  340. :00410734 C78424D8000000FFFFFFFF  mov dword ptr [esp+000000D8], FFFFFFFF
  341. :0041073F 751D                    jne 0041075E
  342. :00410741 E8F31D0C00              call 004D2539
  343. :00410746 8B4804                  mov ecx, dword ptr [eax+04]
  344. :00410749 E803890B00              call 004C9051
  345. :0041074E E91CFFFFFF              jmp 0041066F
  346.  
  347. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  348. |:00410720(C)
  349. |
  350. :00410753 C78424D8000000FFFFFFFF  mov dword ptr [esp+000000D8], FFFFFFFF
  351.  
  352. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  353. |:0041073F(C)
  354. |
  355. :0041075E E8D61D0C00              call 004D2539
  356. :00410763 8B4804                  mov ecx, dword ptr [eax+04]
  357. :00410766 E8E6880B00              call 004C9051
  358. :0041076B B801000000              mov eax, 00000001                  <-- Set up for a passed CD check
  359. :00410770 EB02                    jmp 00410774                       <-- Jump over "set for fail"
  360.  
  361. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  362. |:004106FF(C)
  363. |
  364. :00410772 33C0                    xor eax, eax                       <-- Set for a failed CD check
  365.  
  366. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  367. |:0041065D(U), :00410770(U)
  368. |
  369. :00410774 8B8C24D0000000          mov ecx, dword ptr [esp+000000D0]  <-- This the exit section
  370. :0041077B 5F                      pop edi
  371. :0041077C 5E                      pop esi
  372. :0041077D 5D                      pop ebp
  373. :0041077E 64890D00000000          mov dword ptr fs:[00000000], ecx
  374. :00410785 5B                      pop ebx
  375. :00410786 81C4CC000000            add esp, 000000CC
  376. :0041078C C3                      ret
  377.  
  378.     Well we have gone through a lot of code, but it's down to just one call now, so let's check
  379. out the call 410630 and see if we can make our patch here:
  380.  
  381.   -- Program code --
  382. :0046A728 55                      push ebp
  383. :0046A729 E8025FFAFF              call 00410630          <-- Do the CD check
  384. :0046A72E 83C404                  add esp, 00000004      <-- Adjust stack point for "ebp"
  385. :0046A731 85C0                    test eax, eax          <-- Test the pass/fail value in eax
  386. :0046A733 0F84CC020000            je 0046AA05            <-- Take this jump for failed check
  387. :0046A739 6854020000              push 00000254
  388. :0046A73E E86DDF0500              call 004C86B0
  389. :0046A743 83C404                  add esp, 00000004
  390. :0046A746 89442414                mov dword ptr [esp+14], eax
  391. :0046A74A 3BC5                    cmp eax, ebp
  392.   -- Continuing programming code --
  393.  
  394.     Finally, we have a place to put a simple patch and we have sucessfully kill the FIRST
  395. call the CD check routine.  My method to cracking programs is kill the call to the CD check
  396. and let the program code be able to continue normaly as though the CD check had passed.  The
  397. "best" way to do that here, is to change the call 00410630 to mov eax, 00000001.  This allows
  398. the program to "fall" through the je and let the game continue so we can play it.  Now, lets
  399. go back and track down the second call and find a good location to place our other patch.
  400. Then we'll have a cracked game that can be played any time without the CD present.
  401.  
  402. * Referenced by a CALL at Addresses:
  403. |:00426D21   , :00427391   , :0042C551   , :0042D461   <-- Called by four seperate places
  404. |
  405. :0042C060 56                      push esi
  406. :0042C061 8BF1                    mov esi, ecx
  407. :0042C063 8B86E0000000            mov eax, dword ptr [esi+000000E0] <-- Flag used for "CD check done"
  408. :0042C069 85C0                    test eax, eax
  409. :0042C06B 7408                    je 0042C075                       <-- Jump down to the CD check below
  410. :0042C06D 8A86DC000000            mov al, byte ptr [esi+000000DC]   <-- Else load the pass/fail flag
  411. :0042C073 5E                      pop esi
  412. :0042C074 C3                      ret                               <-- Return to the caller
  413.  
  414. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  415. |:0042C06B(C)
  416. |
  417. :0042C075 E87647FEFF              call 004107F0                            <-- Call the CD check
  418. :0042C07A 8886DC000000            mov byte ptr [esi+000000DC], al          <-- Store the result in new flag
  419. :0042C080 C786E000000001000000    mov dword ptr [esi+000000E0], 00000001   <-- Show we have done the check
  420. :0042C08A 5E                      pop esi
  421. :0042C08B C3                      ret                                      <-- Return to the caller
  422.  
  423.     As you can see, a good place to put the second patch is right here at 42C075.  Again changing
  424. the call to mov eax, 00000001 will overwrite the CD check and allow the program to continue running.
  425. After appling this patch along with the first one, you will have successfully cracked Get Medieval.
  426. Which is why started this little adventure.  The steps need to crack this one are as follows:
  427.  
  428. 1.  Do a full game install
  429. 2.  Make the following edits:
  430.  
  431. Edit Medieval.exe
  432. =============================================
  433. Search for: E8 76 47 FE FF  at offset 177,269
  434. Change to : B8 01 00 00 00
  435.  
  436. Search for: E8 02 5F FA FF  at offset 432,937
  437. Change to : B8 01 00 00 00
  438.  
  439.     Get Medieval is now FiX'ed and can be run from your hard drive without the CD being online.
  440. The last thing you can do is to copy Medieval.fec, which is the movie file.  Just copy this file to
  441. the main Medieval game directory and the program will find it and use it.  This is one of the most
  442. funny intro movies I have ever seen.  I just love the comments made by the four game characters, it
  443. made me bust out laughing.  This is of course optional and not needed to play the game, but I think
  444. it's worth the 42 megs it takes up on the hard drive.
  445.  
  446. Well that concludes this tutorial, now go Get Medieval on someone!
  447.  
  448. Static Vengeance
  449.  
  450. Get Medieval Cheat Codes (same as Claw)
  451. ---------------------------------------
  452. mpkfa    God mode
  453. mppos    Global position
  454. mpfps    Show frames per second
  455.